Ubuntu 包管理器学习
参考资料 Linux 黑话解释:什么是包管理器?它是如何工作的? 参考资料 怎么理解ubuntu中的软件包管理器apt和dpkg
什么是包管理器?
先来说明一下没有包管理器是怎么安装软件的,要想在 Linux 系统中安装软件只能采取源码包的方式安装,所以需要用户自行编译源码并解决软件间的依赖关系,而且升级之类的后续操作也非常困难。
为了摆脱这种复杂性,Linux 发行版创建了自己的打包格式,为终端用户提供随时可用的二进制文件(预编译软件),以便安装软件,同时提供一些元数据(版本号、描述)和依赖关系。
几乎所有的 Linux 发行版都有 “软件仓库”,它基本上是软件包的集合。可以有不止一个软件库,软件库包含不同种类的软件包。
软件仓库也有元数据文件,其中包含了软件包的信息,如软件包的名称、版本号、软件包的描述和软件仓库名称等,系统上的包管理器就是与这个元数据进行交互来处理这些包管理的。可以使用 apt show
命令查看
apt show nginx
包管理器会在系统上创建了一个元数据的本地缓存。当运行包管理器的更新选项(例如 apt update
)时,它会通过引用仓库中的元数据来更新本地元数据缓存。
当运行软件包管理器的安装命令(例如 apt install package_name
)时,软件包管理器会引用这个缓存。如果它在缓存中找到了包的信息,它就会使用互联网连接到相应的仓库,并在系统上安装下载的包。
一个包可能有依赖关系。意思是说,它可能需要安装其他软件包,软件包管理器通常会自动处理这些依赖关系,并将其与正在安装的软件包一起自动安装。
软件包的分类
参考资料 Linux下软件包的分类及deb、rpm、tar.gz的区别
按类型分类
Linux 应用程序的软件包按内容类别可分为两类:
1、可执行文件(编译后的二进制软件包)
解开包后就可以直接运行的。在 Windows 中所有的软件包都是这种类型。安装完这个程序后,你就可以使用,但你看不到源程序。而且下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。
- 优点:使用简单,只需要几个命令就可以实现包的安装、升级、查询、卸载;安装速度快;
- 缺点:不能看源代码;功能选择不如源代码灵活;依赖性;
2、源程序(源码包)
解开包后,你还需要使用编译器将其编译成为可执行文件。这在 Windows 系统中是几乎没有的,因为 Windows 的思想是不开放源程序的。
- 优点:开源;可以自由选择所需功能;可看源代码;卸载方便(直接删除安装位置);
- 缺点:安装步骤过多;编译时间过长;
Linux 下软件包的格式分类
Linux 下的软件安装包主要有 rpm、deb、tar.gz 三种格式,想了解三种软件包的区别,我们先来看看 Linux 软件扩展名,通过扩展名可以了解软件格式,进而了解软件安装。
软件后缀为 .rpm
最初是 Red Hat Linux 提供的一种包封装格式,现在许多 Linux 发行版本都使用;
后缀为 .deb
是 Debain Linux 提供的一种包封装格式;
后缀为 .tar.gz
、tar.Z
、tar.bz2
或 .tgz
是使用 Unix 系统打包工具 tar 打包的;
后缀为 .bin
的一般是一些商业软件。
rpm 格式软件包
RPM 全称是 Red Hat Package Manager(Red Hat 包管理器),是由红帽公司最先发布的一种用来打包软件的的文件格式,他是一种特定的用来安装,卸载软件等操作的专门格式,它里面打包的内容必定是一个可以使用的具体软件。
RPM 本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的 Linux 软件。在红帽 LINUX、SUSE、Fedora 可以直接进行安装,但在 Ubuntu 中却无法识别。
deb 格式软件包
deb 是 Debian Linux 提供的一个包管理器,它与 RPM 十分类似。但由于 RPM 出现得早,并且应用广泛,所以在各种版本的 Linux 中都常见到,而 Debian 的包管理器 dpkg 只出现在 Debian Linux 中。它的优点是不用被严格的依赖性检查所困扰,缺点是只在 Debian Linux 发行版中才能见到这个包管理工具。
在 Ubuntu 系统中双击 deb 包就可以进入自动安装进程。
tar.gz 格式软件包
tar.gz
就是一个压缩包,类似于 win 上面的 zip 等文件,他是为了便于传输所产生的一种专门用于网络流通的文件格式,这种文件的格式与其他两种软件存在本质上的区别,比如:tar.gz
可以也是一个文本,照片等等的文件压缩在里面,并不一定是一个具体软件。
在所有的 Linux 版本中都能使用,但安装过程也最麻烦。
apt 命令学习
参考资料 apt-get命令 参考资料 怎么理解ubuntu中的软件包管理器apt和dpkg
apt 是什么?
Advanced Packaging Tool(apt)是Linux下的一款安装包管理工具,是一个客户/服务器系统。
在服务器上先复制所有 DEB 包(DEB 是 Debian 软件包格式的文件扩展名),然后用 APT 的分析工具(genbasedir)根据每个 DEB 包的包头(Header)信息对所有的 DEB 包进行分析,并将该分析结果记录在一个文件中,这个文件称为DEB 索引清单(就是上面说的那个本地源数据缓存),APT 服务器的 DEB 索引清单置于 base 文件夹内。
一旦 APT 服务器内的 DEB 有所变动,一定要使用 genbasedir 产生新的 DEB 索引清单。客户端在进行安装或升级时先要查询 DEB 索引清单,从而可以获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。
当客户端需要安装、升级或删除某个软件包时,客户端计算机取得 DEB 索引清单压缩文件后,会将其解压置放于 /var/state/apt/lists/
,而客户端使用 apt-get install
或 apt-get upgrade
命令的时候,就会将这个文件夹内的数据和客户端计算机内的 DEB 数据库比对,知道哪些 DEB 已安装、未安装或是可以升级的。
它有两个主要工具:apt-get
和 apt-cache
apt 命令的几个缺省路径
下载的软件存放位置:/var/cache/apt/archives
安装后软件默认位置:/usr/share
可执行文件位置:/usr/bin
配置文件位置:/etc
库文件位置:/usr/lib
更新本地元数据缓存
sudo apt-get update
升级软件
使用 apt-get 升级已安装的软件包
sudo apt-get upgrade
# 要仅升级特定程序
sudo apt-get upgrade <package_name>
查看软件列表
dpkg -l # 列出当前系统中所有的包.可以和参数 less 一起使用在分屏查看.
dpkg -l | grep -i "软件包名" # 查看系统中与"软件包名"相关联的包.
搜索软件
使用 apt-cache 命令搜索包
# 只要有关的就能找的到(这玩意找的话能找出一大堆,尽量还是少用)
apt-cache search <search term>
# 只找包名相关
apt-cache pkgnames <search_term>
安装包
sudo apt-get install <package_name>
# 多个包
sudo apt-get install <package_1> <package_2> <package_3>
# 安装特定版本
sudo apt-get install <package_name>=<version_number>
删除包(卸载软件)
sudo apt-get remove <package_name>
# package 删除包,包括删除配置文件等
sudo apt-get remove --purge <package_name>
# apt-get remove 和 apt-get purge 的区别就是
# apt-get remove只删除包的二进制文件。它不会触及配置文件
# apt-get purge删除与包相关的所有内容,包括配置文件
sudo apt-get purge <package_name>
# package 删除包及其依赖的软件包配置文件等
sudo apt-get autoremove --purge <package_name>
清空本地缓存
使用 apt-get 清理系统
# 使用以下命令清除检索到的包文件的本地存储库
sudo apt-get clean
# autoclean 只删除那些现在有更新版本的检索包文件,它们将不再使用。
sudo apt-get autoclean
查看已安装的软件
apt list
# 或者
dpkg -l
dpkg 命令学习
dpkg 是什么?
Ubuntu 是基于 Debian 的 Linux 系统,而 Debian 系统的软件是使用 APT 和 dpkg 进行管理。dpkg 是 "Debian Packager" 的简写,是一个底层的软件包管理工具。
与 apt 的区别
与上面的 apt 区别是:
- apt 是会解决和安装模块的依赖问题,并会咨询软件仓库,是在线安装。
- dpkg 只能安装本地的 deb 文件,不会关心 Ubuntu 的软件仓库内的软件,不会解决模块的依赖关系。
且 dpkg 可以绕过 apt 包管理数据库对软件包进行操作,所以你用 dpkg 安装过的软件包用 apt 可以再安装一遍,系统不知道之前安装过了,将会覆盖之前 dpkg 的安装。
常用的 dpkg 命令
# 安装一个 Debian 软件包,如手动下载的文件。
dpkg -i package.deb
# 列出 package.deb 的内容。
dpkg -c package.deb
# 从 package.deb 中提取包信息。(来查看软件的状态)
dpkg -I package.deb
# 移除一个已安装的包。
dpkg -r package
# 完全清除一个已安装的包。
# 和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。
dpkg -P package
# 列出 package 安装的所有文件清单。
dpkg -L package
# 显示已安装包的信息。
dpkg -s package
# 重新配制一个已经安装的包,如果它使用的是 debconf (debconf 为包安装提供了一个统一的配置界面)。
dpkg -reconfigure package
# 查看软件在哪个包里;
dpkg -S package
检查包的路径
example
dpkg -L nghttp2
snap 包管理器
apt 所采用的包是 deb 包,deb 包最初是Debian Linux推出的。由于ubuntu基于debian,ubuntu将其集成到了apt包管理器中。apt可以自动解决软件之间依赖问题,ubuntu创建了一个类似apple store的软件商店。
总结:与 deb 包不同的是,它将依赖包打包到应用中了,可以解决之前 Linux 下各种依赖导致的问题,不过相应的,软件体积变大了,就像 win 和 mac 中傻瓜式的安装方式
常用命令
获取帮助
snap help
安装、卸载官方商店的应用:
sudo snap install <软件名>
sudo snap remove <软件名>
安装本地应用
sudo snap install --dangerous <文件名(.snap结尾)>